#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

// int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *attr);  初始化互斥锁  参数 mutex:未初始化过互斥锁变量的地址 mutexattr：普通属性，NULL
// pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
// 也就是说，以上这句话等价于：
// pthread_mutex_t m;
// pthread_mutex_init(&m,NULL);

// int pthread_mutex_lock(pthread_mutex_t *mutex);    // 加锁     如果加锁失败，会阻塞
// int pthread_mutex_trylock(pthread_mutex_t *mutex); // 尝试加锁  如果加锁失败，直接返回，不会阻塞

// int pthread_mutex_unlock(pthread_mutex_t *mutex); // 解锁

// int pthread_mutex_destroy(pthread_mutex_t *mutex); // 销毁互斥锁

int g_val = 10;

int main()
{
    pthread_mutex_t mutex;
    pthread_mutex_init(&mutex, NULL);

    // 上锁 （如果没有被其他线程上锁，这里就可以成功上锁）
    pthread_mutex_lock(&mutex); // 加锁
    // 上锁成功之后可以操作共享资源
    printf("g_val=%d\n", g_val);
    g_val = 100;
    printf("g_val=%d\n", g_val);

    // 使用完成后解锁
    pthread_mutex_unlock(&mutex); // 解锁

    return 0;
}